package server;

import java.rmi.RemoteException;

import communication.ComandoComm;
import communication.ServerComm;

public class MsgInterpreter implements Runnable {
	private Thread interpreter;
	private ServerComm stream;
	private String message;
	private Server server;
	
	public MsgInterpreter (ServerComm stream, Server server, String msg){
		this.stream = stream;
		message = msg;
		this.server = server;
		interpreter = new Thread(this);
		interpreter.start();
	}
	@Override
	public void run() throws IllegalArgumentException {
		String response = ComandoComm.comandoNonValido.toString();
		String[] parameters = message.split("@")[1].split(",");
		try  {
			switch(ComandoComm.valueOf(parameters[0])){
			
			case creaUtente: {
				if (parameters.length==3)
					response = server.creaUtente(parameters[1], parameters[2]);
			} break;
			
			case creaRazza: {
				if (parameters.length==4)
					response = server.creaRazza(parameters[1], parameters[2], parameters[3].charAt(0));
			} break;
						
			case login: {
				if (parameters.length==3)
					response = server.clientLogin(parameters[1], parameters[2]);
			} break;
			
			case logout: {
				if (parameters.length==2)
					response = server.clientLogout(parameters[1]);
			} break;

			case accessoPartita: {
				if (parameters.length==2)
					response = server.accessoPartita(parameters[1]);
			} break;
			
			case uscitaPartita: {
				if (parameters.length==2)
					response = server.uscitaPartita(parameters[1]);
			} break;
			
			case classifica: {
				if (parameters.length==2)
					response = server.classifica(parameters[1]);
			} break;
			
			case listaGiocatori: {
				if (parameters.length==2)
					response = server.listaGiocatori(parameters[1]);
			} break;
			
			case confermaTurno: {
				if (parameters.length==2)
					response = server.confermaTurno(parameters[1]);
			} break;
			
			case passaTurno: {
				if (parameters.length==2)
					response = server.passaTurno(parameters[1]);
			} break;
			
			case mappaGenerale: {
				if (parameters.length==2)
					response = server.mappaGenerale(parameters[1]);
			} break;
			
			case vistaLocale: {
				if (parameters.length==3)
					response = server.vistaLocale(parameters[1], parameters[2]);
			} break;

			case listaDinosauri: {
				if (parameters.length==2)
					response = server.listaDinosauri(parameters[1]);
			} break;
			
			case statoDinosauro: {
				if (parameters.length==3)
					response = server.statoDinosauro(parameters[1], parameters[2]);
			} break;
			
			case cresciDinosauro: {
				if (parameters.length==3)
					response = server.cresciDinosauro(parameters[1], parameters[2]);
			} break;
			
			case deponiUovo: {
				if (parameters.length==3)
					response = server.deponiUovo(parameters[1], parameters[2]);
			} break;
			
			case muoviDinosauro: {
				if (parameters.length==5)
					response = server.muoviDinosauro(parameters[1], parameters[2], parameters[3].substring(1), parameters[4].substring(0,parameters[4].length()-1));
			} break;
			
			}
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		}
		try {
			stream.msgToClient(response);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
}